package service

import (
	"errors"
	"gorm.io/gorm/clause"
	"wit-admin-go/system/app/dto"
	"wit-admin-go/system/app/model"
	"wit-admin-go/system/utils"
)

type apisService struct{}

var ApisService = new(apisService)

// PostCreateApis  创建接口
func (us *apisService) PostCreateApis(apis dto.Apis) (err error) {
	return utils.DB.Create(&apis).Error
}

// PutUpdateApis 修改接口
func (us *apisService) PutUpdateApis(apis dto.Apis) (err error) {
	_, errN := us.GetApisById(apis.Id)
	if errN != nil {
		return errN
	}
	apisS := new(model.Apis)
	return utils.DB.Model(&apisS).Where("id = ?", apis.Id).Updates(apis).Error
}

// GetApisById 通过ID查询数据
func (us *apisService) GetApisById(id string) (apis model.Apis, err error) {
	err = utils.DB.First(&apis, "id = ?", id).Error
	if err != nil {
		return apis, errors.New("数据没找到")
	}
	return apis, err
}

// GetApisList 获取所有数据
func (us *apisService) GetApisList(page *dto.ApisPage) (*[]model.Apis, int64) {
	apis := new([]model.Apis)
	db := utils.DB.Preload(clause.Associations)
	if page.Name != "" {
		db = db.Where("name LIKE ?", "%"+page.Name+"%")
	}
	if page.GroupName != "" {
		db = db.Where("group_name LIKE ?", "%"+page.GroupName+"%")
	}
	if page.Method != "" {
		db = db.Where("method = ?", page.Method)
	}
	total := db.Scopes(utils.Paginate(page.PageNum, page.PageSize)).Find(&apis).RowsAffected
	if total > 0 {
		return apis, total
	} else {
		return nil, 0
	}
}

// DelApis 删除数据
func (us *apisService) DelApis(id string, userId string) (err error) {
	apis, errN := us.GetApisById(id)
	if errN != nil {
		return errN
	}
	apis.DeleteId = userId
	err = utils.DB.Delete(&apis, "id = ?", id).Error
	return err
}

// RemoveApis 永久删除数据
func (us *apisService) RemoveApis(id string) (err error) {
	apis := new(model.Apis)
	err = utils.DB.Unscoped().Delete(&apis, "id = ?", id).Error
	return err
}
